// 导入模块
import { Vec3 } from 'cc';

/**
 * 游戏工具函数集
 */
export class Helpers {
    /**
     * 生成随机整数
     * @param min 最小值
     * @param max 最大值
     * @returns 随机整数
     */
    public static randomInt(min: number, max: number): number {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }

    /**
     * 计算两点间距离
     * @param pos1 点1
     * @param pos2 点2
     * @returns 距离
     */
    public static distance(pos1: Vec3, pos2: Vec3): number {
        const dx = pos1.x - pos2.x;
        const dy = pos1.y - pos2.y;
        const dz = pos1.z - pos2.z;
        return Math.sqrt(dx * dx + dy * dy + dz * dz);
    }

    /**
     * 格式化时间(秒)为MM:SS
     * @param seconds 秒数
     * @returns 格式化后的时间字符串
     */
    public static formatTime(seconds: number): string {
        const mins = Math.floor(seconds / 60);
        const secs = Math.floor(seconds % 60);
        const pad = (num: number): string => (num < 10 ? `0${num}` : num.toString());
        return `${pad(mins)}:${pad(secs)}`;
    }

    /**
     * 生成UUID
     * @returns UUID字符串
     */
    public static generateUUID(): string {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
            const r = (Math.random() * 16) | 0;
            const v = c === 'x' ? r : (r & 0x3) | 0x8;
            return v.toString(16);
        });
    }

    /**
     * 限制数值范围
     * @param value 输入值
     * @param min 最小值
     * @param max 最大值
     * @returns 限制后的值
     */
    public static clamp(value: number, min: number, max: number): number {
        return Math.min(Math.max(value, min), max);
    }
}
